package API.ObjectDome;

import API.SystemDome.User;
import com.google.gson.Gson;

/**
 * ClassName:ObjectText005
 * Package:API.ObjectDome
 * Description:
 *
 * @Author:ZhangXin
 * @Create2023/1/31-12:26
 * @Version:v1.0
 */
public class ObjectText005 {
    //protected Object clone(int a) 对象克隆
    //把A对象的属性值完全拷贝给B对象,也叫对象拷贝,对象复制
    public static void main(String[] args) throws CloneNotSupportedException {
        //1.创建对象
        int[]date={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,0};
        User u1 = new User(1,"ZhangSan","123","girl11",date);

        //克隆对象
        /*
        * 细节：
        * 方法在底层会帮我们创建一个对象,并把原对象中的数据拷贝过去
        *
        * 书写细节
        * 1.重写Object中的clone方法
        * 2.让javabean类实现Cloneable接口
        * 3.创建原对象并调用clone就可以*/
//        User u2 = (User) u1.clone();
//
//        //验证:Object中的克隆是浅克隆  return super.clone();
        int[] arr = u1.getDate();
        arr[0] = 100;
//        System.out.println(u1);
//        System.out.println(u2);

        /*
         * 第三方工具
         * 1.把第三方写的代码导入到项目中
         * 2.编写代码*/
        Gson gson = new Gson();
        //把对象变成一个字符串
        String s = gson.toJson(u1);
        //再把字符串变回对象
        User user = gson.fromJson(s,User.class);

//        int[] arr = u1.getDate();
//        arr[0] = 100;

//        int []arr = u1.getDate();

        //打印对象
        System.out.println(user);

    }

}
/*
* 浅克隆：不管对象内部的属性是基本数据类型还是引用数据类型,都完全拷贝过来
* 深克隆：基本数据类型拷贝过来,字符串复用,引用数据类型会重新创建新的*/